package com.wang.interview.designmode.iterator;

import java.util.ArrayList;
import java.util.List;

/**
 * @author: wang
 * @date: 2021/8/2 10:14
 * @description:使用集合存放元素
 */
public class Class2<E> {

    private List<E> es = null;
    private int cursor;
    Itr itr = new Itr();
    public Class2(List<E> es) {
        this.es = es;
    }

    /**
     * 添加元素
     * @param e
     */
    public void add(E e){
        if (!itr.hasNext()){throw new IndexOutOfBoundsException();}
        es.add(e);
    }

    /**
     * 删除元素
     * @param index
     * @return
     */
    public E remove(int index){
        return itr.remove(index);
    }

    /**
     * 遍历展示元素
     */
    public void show(){
        System.out.println("==============class2===============");
        while (itr.hasNext()) {
            E e = itr.next();
            System.out.println(e);
        }
    }

    private class Itr implements MyIterator<E>{   // 如果不用内部类，那么在调用对应迭代器的时候就应该把对应的集合传过去。

        @Override
        public boolean hasNext() {
            return cursor < es.size();
        }

        @Override
        public E next() {
            E e = es.get(cursor);
            cursor++;
            return e;
        }

        @Override
        public E remove(int index) {
            throw new UnsupportedOperationException();
        }
    }

}
